linux shell 進階指令
碎碎念
我也不知道這算不算進階?
但平常我應該不會用,本文有
- 計算某個開頭的tag數量有多少
- for迴圈的資料寫到文字檔
- 取得檔案詳細時間
- 取得檔案列表後刪除
- xargs 參數
- 只顯示資料夾
- 只顯示檔案
- ls參數
- 計算目錄底下的檔案數
- 查詢使用者
- 消耗最多CPU的process
正文
計算某個開頭的tag數量有多少
for tag in $(git tag --sort -version:refname -l "1.1.*"); do
echo $tag;
let i++
done
echo $i;
unset i;
for迴圈的資料寫到文字檔
for i in {20221201..20221202}
do
for j in {00..01}
do
echo "mkdir $i$j"
done
done > 1.txt
取得檔案詳細時間
ls --full-time | sort -k6
or
stat file.txt
取得檔案列表後刪除
ls | grep 4793877c | xargs -p rm -f
xargs 參數
-I {} 將指令帶到後面的{}執行
ls nfs | head -10 | xargs -t -I {} ls nfs/{}
-t 顯示執行的指令
-p 執行前的確認
ref.
只顯示資料夾
ls -l | grep
{ #d}
# 利用詳細資訊,判斷開頭是不是 d(directory)
ls -d */
ls -F | grep \/$ # 檔案名稱的最後如果有/表示是folder
只顯示檔案
ls -F /etc | grep -v '/$'
ls參數
-l 顯示檔案與目錄的詳細資訊
-a 顯示隱藏的檔案與目錄
-h 輸出的資訊以比較容易閱讀的格式呈現
-F 檔案名稱的後面加上檔案類型的標示字元
-r 檔案的列表以反向的排序列出
-R 用遞迴的方式列出所有子目錄的檔案
-S 檔案依照檔案的大小來排序
-d 只列出目錄,後面不加上*/ 無法顯示
--full-time 顯示完整時間
計算目錄底下的檔案數
find ./ -type f -name *.*| wc -l
find [obj_directory] [-type f] [-name filename]
find參數說明:
obj_directory:要搜尋的路徑
-type:要搜尋的類型,f=檔案,d=目錄
-iname:不區分大小寫
-name:後面接檔名,可加萬用字元(*),搜尋類似檔名的檔案
wc [-l]
wc參數說明:
-c: 統計位元組數
-l:統計行數
-m:統計字元數。不能與 -c 一起使用。
-w 統計字數。一個字被定義為由空白、跳格或換行字元分隔的字串。
-L 列印最長行的長度。
-help 顯示説明資訊。
ref.
[Linux] 計算目錄底下的檔案數
查所有使用者
cat /etc/passwd | awk -F: '{print $1}'
ref. How To List Users and Groups on Linux
刪除使用者
userdel -r <userID>
ref. [GCP]遇到permission denied (publickey)怎麼辦?
ref.
linux何時安裝
stat / | awk '/Birth: /{print $2 " " substr($3,1,5)}'
ref. Linux Installation Date: How to Discover Your System’s Age
condition條件判斷
if [[ ! -d "$1" ]]; then
mkdir -p "$1"
fi
可以使用 兩個 [[
或 一個 [
,
代表的意思差不多,只是兩個 [
算是新版用法,
他可以多做字串的比較操作== , != ,=~
。
-d
是一個條件測試標誌,檢查是否為目錄
其他的相似的標誌如下
-d
,用於檢查指定路徑是否為目錄。-f
:檢查指定路徑是否為普通檔案。-x
:檢查檔案是否可執行。-r
:檢查檔案是否可讀。-w
:檢查檔案是否可寫。-s
:檢查檔案是否存在且大小不為零。-e
:檢查檔案是否存在。
function 建立
function bindmount() {
if [[ ! -d "$1" ]]; then
mkdir -p "$1"
fi
chown -R :100 "$1" "$2"
mount --bind "$1" "$2"
}
bindmount "/home/mike/upload" "/home/bms/mike"
傳參數進去時,記得在後面加上"
雙引號,包起來,
避免中間有特別的字元導致,輸入失敗。
稍微提一下,mount --bind 前面是來源 ,後面是目的。
我不太懂GPT的回答
消耗最多CPU的process
ps H -eo pid,pcpu | sort -nk2 | tail
對應的服務名稱
ps aux | fgrep <PID>